7 research outputs found
Analogy-Making as a Core Primitive in the Software Engineering Toolbox
An analogy is an identification of structural similarities and
correspondences between two objects. Computational models of analogy making
have been studied extensively in the field of cognitive science to better
understand high-level human cognition. For instance, Melanie Mitchell and
Douglas Hofstadter sought to better understand high-level perception by
developing the Copycat algorithm for completing analogies between letter
sequences. In this paper, we argue that analogy making should be seen as a core
primitive in software engineering. We motivate this argument by showing how
complex software engineering problems such as program understanding and
source-code transformation learning can be reduced to an instance of the
analogy-making problem. We demonstrate this idea using Sifter, a new
analogy-making algorithm suitable for software engineering applications that
adapts and extends ideas from Copycat. In particular, Sifter reduces
analogy-making to searching for a sequence of update rule applications. Sifter
uses a novel representation for mathematical structures capable of effectively
representing the wide variety of information embedded in software. We conclude
by listing major areas of future work for Sifter and analogy-making in software
engineering.Comment: Conference paper at SPLASH 'Onward!' 2020. Code is available at
https://github.com/95616ARG/sifte
Semi-automating small-scale source code reuse via structural correspondence
Bibliography: p. 73-78some pages are in colou
Pragmatic Software Reuse: A View from the Trenches
Software reuse has been a part of the software engineering field since its inception. Research on reuse
has focused almost exclusively on pre-planned approaches. Relatively little has been written about reuse
performed in the absence of its pre-planning: pragmatic reuse. While many academics have dismissed nonpre-
planned reuse as ill-advised, very little evidence exists about it, especially with respect to industrial
practice. We conducted a survey of 59 industrial software developers to capture the perception, frequency,
motivations, difficulties, and execution of the practice of pragmatic reuse within their development activities.
We found that the majority of developers surveyed perceive that: pragmatic reuse has an important place in
their repertoire of techniques; pragmatic reuse tasks are a frequent part of their development activities; and
that they face a variety of practical difficulties while performing pragmatic reuse tasks. Opinions vary on the
range and scale of situations where pragmatic reuse is suitable.N
Using Structural Generalization to Discover Replacement Functionality for API Evolution
New versions of software libraries sometimes introduce incompatible
and undocumented changes into their application
programming interfaces (APIs). A developer whose
software uses the API must determine how to migrate it
in response. Existing approaches for determining migration
paths are often of limited help, requiring speci c library
characteristics, or resolving a small subset of actual changes.
We present a new approach, matching via structural general-
ization (MSG), that recommends replacement functionality
from a new API version, based on its structural similarity
to functionality removed from the old API. We rei ed
our approach in a prototype API change recommendation
tool called Umami, which we used to resolve binary incompatible
changes in 20 Java library migrations, comparing
its accuracy to other analysis and change recommendation
techniques. Our results suggest MSG is complementary to
existing approaches, providing useful results in API migration
situations where the others fail.N
The End-to-End Use of Source Code Examples: An Exploratory Study - Appendix
This appendix contains the details of our case studies outlined
in our paper for the 2009 International Conference on
Software Maintenance, as well as an expanded discussion
section. The reader is directed to the main paper for introduction,
motivation, and related work.N